import axios from 'axios';

const owner = 'Cute-Dress';
const repo = 'Dress';
const githubToken = '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';
const banNum = 10; //几次刷屏后禁言 大于等于2  若消息发送太快，次数会有偏差
const muteTime = 5; //禁言时间：分钟
export class SuiJiNanNiang extends plugin {
        constructor() {
            super({
                name: '男娘', 
                dsc: '男娘图片',  
                event: 'message',  
                priority: 6,   
                rule: [
                    {
                        reg: '^#?(随机)?男娘图片$',   
                        fnc: 'displayRandomImage'  
                    },
                    {
                        reg: '',
                        fnc: 'ban'
                    }
                ]
            })
    
        }

    async fetchDirectoryContents(path) {
        try {
            const encodedPath = encodeURIComponent(path);
            const response = await axios.get(`https://api.github.com/repos/${owner}/${repo}/contents/${encodedPath}`, {
                headers: {
                    Authorization: `token ${githubToken}`
                }
            });
            return response.data;
        } catch (error) {
            console.error('获取目录内容时出错：', error);
            return [];
        }
    }

    // 从给定的路径获取所有图片文件
    async getAllImageFilesFromDirectories(path) {
        // 尝试获取路径下的目录内容
        try {
            const directories = await this.fetchDirectoryContents(path);

            // 检查获取到的内容是否为数组
            if (!Array.isArray(directories)) {
                console.error('获取到的目录内容不是数组：', directories);
                return [];
            }

            // 初始化图片文件数组
            const imageFiles = [];

            // 遍历目录内容
            for (const item of directories) {
                // 如果是文件，且不是`.gitignore`或`README.md`
                if (item.type === 'file' && !['.gitignore', 'README.md'].includes(item.name)) {
                    // 获取文件名（小写）
                    const fileName = item.name.toLowerCase();
                    // 如果文件名以`.jpg`、`.jpeg`、`.png`或`.gif`结尾，则加入图片文件数组
                    if (fileName.endsWith('.jpg') || fileName.endsWith('.jpeg') || fileName.endsWith('.png') || fileName.endsWith('.gif')) {
                        imageFiles.push(item.download_url);
                    }
                } else if (item.type === 'dir') {
                    // 获取子目录下的所有图片文件
                    const nestedImageFiles = await this.getAllImageFilesFromDirectories(item.path);
                    // 将子目录下的图片文件加入图片文件数组
                    imageFiles.push(...nestedImageFiles);
                }
            }

            // 返回图片文件数组
            return imageFiles;
        } catch (error) {
            console.error('获取所有图片文件时出错：', error);
            return [];
        }
    }

    // 异步函数，用于显示随机图片
    async displayRandomImage(e) {
        try {
            // 获取根目录内容
            const rootDirectories = await this.fetchDirectoryContents('');
            // 从根目录中随机选择一个文件夹
            const randomFolder = rootDirectories[Math.floor(Math.random() * rootDirectories.length)].path;
            // 获取文件夹中的所有图片文件
            const files = await this.getAllImageFilesFromDirectories(randomFolder);

            // 如果没有找到图片文件，则输出提示信息
            if (files.length === 0) {
                console.log('随机选取的文件夹中找不到图片。');
                return;
            }

            // 从图片文件中随机选择一个文件
            const randomFile = files[Math.floor(Math.random() * files.length)];
            // 回复图片文件
              let buttons = [
                    [
                      {
                        text: '再来一张',
                        input: `#随机男娘图片`,
                        send: true,
                      },
                    ],
                  ];
                  e.reply([
                    segment.image(randomFile),
                    segment.button(...buttons),
                  ]);
                  return true  
        } catch (error) {
            console.error('错误:', error);
        }
    }
    async ban(e) {
        let key = `MEMZ:ban:${e.group_id}`;
        let res = await global.redis.get(key);
        let newMsg = e.toString();

        if (!res) {
            res = { banID: e.user_id, msgNum: 1, msg: newMsg, sendMsg: "" };
            await global.redis.set(key, JSON.stringify(res), {
                EX: 3600 * 8,
            });
            return true;
        } else {
            res = JSON.parse(res);
        }

        if (newMsg == res.msg && res.banID === e.user_id) {
            res.msgNum++;
        } else {
            res.banID = e.user_id;
            res.msg = newMsg;
            res.msgNum = 1;
        }

        if ((res.msgNum++) > banNum && newMsg != res.sendMsg) {
            res.sendMsg = newMsg;
            // e.reply(e.message);
            console.log('[MEMZ]刷屏禁言');
            let jycz = await e.group.muteMember(e.user_id, 60 * muteTime)
            if (jycz){
            await this.reply([segment.at(e.user_id),` 因刷屏被禁言${muteTime}分钟`])
            }
            await global.redis.set(key, JSON.stringify(res), {
                EX: 3600 * 8,
            });
            return true;
        }
        await global.redis.set(key, JSON.stringify(res), {
            EX: 3600 * 8,
        });
        return false;
    }
}
